/**  问题来了？为什么要自己封装请求不使用axios库？内置于 uni-app 框架，不需要额外安装和引入第三方库。兼容多端，可以方便地在不同平台上使用。
 * 请求封装
 *  1. 返回 Promise 对象，用于处理返回值类型
 *  2. 获取数据成功、提取核心数据 res.data
 *  3. 获取数据失败
 *    3.1 401错误  -> 清理用户信息，跳转到登录页
 *    3.2 其他错误 -> 根据后端错误信息轻提示
 *    3.3 网络错误 -> 提示用户换网络
 */
import {useMemberStore } from '@/stores/modules/test.js';
export const http = (options) => {
  // 1. 返回 Promise 对象 成败会有两个不同的回调函数
  return new Promise((resolve, reject) => {
    uni.request({
		// #接受过来的参数   三个点一定要加 展开   不然就结构不到url字段
       ...options,
      // uni.request只要响应就返回reslve则进行回调，所以我们加强改下判断下statucode
     //成功代表响应了，包括404也算响应了
        // 状态码 2xx，参考 axios 的设计
		 success(res) { 
        if (res.statusCode >= 200 && res.statusCode < 300) {	
          // 2.1 提取核心数据 res.data

          resolve(res.data)} 
		else if (res.statusCode === 401) {
          // 401错误  -> 清理用户信息，跳转到登录页
          const memberStore = useMemberStore()
          memberStore.clearProfile()
          uni.navigateTo({ url: '/pages/login/login' })
		  
          reject(res)
        } 
		
		else {
          // 其他错误 -> 根据后端错误信息轻提示
          uni.showToast({
            icon: 'none',
            title:  res.data?.msg || '请求错误',
          })
		  
          reject(res)
        }
      },
      // 响应失败，代表根本没响应
      fail(err) {
        uni.showToast({
          icon: 'none',
          title: '网络错误，换个网络试试',
        })

        reject(err)
      },
	  // complete() {
	  //                 uni.hideLoading();
	  //                 uni.hideToast();
	  //             }
    })
  })
}



// 调用示例,茄汁需要asycs await结构进行调用
// const response = await http({
// 					    url: '/minisoft/get_openid',
// 					    method: 'post',
// 					    data: {
// 					        code: res.code
// 					    }
// 					})